//给定一个字符串数组 strs ，将 变位词 组合在一起。 可以按任意顺序返回结果列表。
//
// 注意：若两个字符串中每个字符出现的次数都相同，则称它们互为变位词。
//
//
//
// 示例 1:
//
//
//输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
//输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
//
// 示例 2:
//
//
//输入: strs = [""]
//输出: [[""]]
//
//
// 示例 3:
//
//
//输入: strs = ["a"]
//输出: [["a"]]
//
//
//
// 提示：
//
//
// 1 <= strs.length <= 10⁴
// 0 <= strs[i].length <= 100
// strs[i] 仅包含小写字母
//
//
//
//
//
// 注意：本题与主站 49 题相同： https://leetcode-cn.com/problems/group-anagrams/
//
// Related Topics 数组 哈希表 字符串 排序 👍 56 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function groupAnagrams(strs: string[]): string[][] {

    /**
     * @param {string[]} strs
     * @return {string[][]}
     */
    let groups = new Map();
    for (let a of strs) {
        // split 和 Array.from都可以把字符串转成数组
        // let arr = a.split("");
        let arr = Array.from(a);
        // 把一组变位词映射到同一个单词
        // 由于互为变位词的单词的字母出现的次数分别相同
        // 如果把单词中的字母排序就会得到相同的字符串
        arr.sort();
        let sortedStr = arr.join("");
        if (groups.has(sortedStr)) {
            groups.get(sortedStr).push(a);
        } else {
            groups.set(sortedStr, [a]);
        }
    }
    let result = [];
    for (let a of groups.values()) {
        result.push(a);
    }
    return result;


};
//leetcode submit region end(Prohibit modification and deletion)
